<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>

</html>
<script>
    //声明式
    function fn1() {
        console.log('fn1');
    }
    //函数表达式 - 赋值式。
    var fn2 = function() {
        console.log('fn2');
    };

    fn1();
    fn2();

    //函数表达式 - 自执行。
    ! function() {
        console.log('fn3');
    }();

    //函数表达式 - 事件处理函数。
    document.onclick = function() {
        console.log('fn4');
    }


    //一.函数的参数
    //函数的参数包括形参和实参
    //形参出现在函数定义中,整个函数体内都可以使用,形参相当于定义在函数内部的变量,是形式上存在的(即声明了没赋值)
    //而实参则出现在主调函数中，实参将值传递给形参。实参是具体的值。
    //函数不介意传入多少个参数，也不会因为参数的个数不统一而报错。
    //函数声明
    // function sum(a, b) { //a,b:形参  相当于  var a = undefined , b = undefined
    //     alert(a + b);
    // }

    // 函数调用
    // sum(3, 4); //7
    // sum(100, 200) //300
    // sum(1000, 2000, 3000); //3000 //多了忽略不计
    // sum(250) //NaN
    // sum(); //NaN


    //系统提供一个特殊的对象(只能应用于函数内部) - arguments 。
    //arguments.length : 获取参数的长度
    //arguments[下标]：下标是从0开始的整数,给每一个参数准备一个整数标记，通过此标记获取对应的参数值。
    function sum() {
        console.log(arguments);
        console.log(arguments.length); //200 参数的个数
        console.log(arguments[0]); //第一个参数的值  1
        console.log(arguments[1]); //第二个参数的值  2
        for (var i = 0, he = 0; i < arguments.length; i++) { //i:0-199
            he += arguments[i]; //累加
        }
        console.log(he); //1100
    }

    sum(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
</script>